package com.sy.service.impl;

import com.sy.fileservice.ISave;
import com.sy.fileservice.SaveToCloudDisk;
import com.sy.fileservice.SaveToLocalDisk;
import com.sy.service.UserService;

public class UserServiceImpl implements UserService {

    //private SaveToLocalDisk saveToLocalDisk = new SaveToLocalDisk();

    //1.如果要修改文件的保存方式，就得重新创建其它保存操作对应的操作类
    //缺点：源代码需要进行大量修改
    //private SaveToCloudDisk saveToCloudDisk = new SaveToCloudDisk();

    //2.针对1中的做法，有没有办法减少代码的修改量？
    //思路：对各种保存操作的类给定一个共同的父类或者一个共同的接口
    //这里使用了面向对象中的多态机制（向上造型）
    //这里在修改实现方式的过程中，只需要修改等号右边的实现类即可，等号左边始终是一个统一的类型
    //这里思想就是“面向接口编程的思想”
    //缺点：等号右边的这块内容在项目编译完毕后，如果要修改，则需要修改Java源代码然后再重新编译（耦合紧密）
    private ISave save ;


    //3.对于2中耦合过紧的解决方案
    //思路：不要把对象的创建写死在代码中，通过引入配置文件的方式，在外部来灵活配置要创建的对象及它们的依赖关系

    @Override
    public void saveFile() {
        System.out.println("开始保存文件...");
        //具体的保存操作
        //saveToLocalDisk.save();
        //saveToCloudDisk.save();
        save.save();
        System.out.println("结束保存文件");
    }
}
